<?php
	//FIXME: Verificar integridade , via hash file
	//FIXME: Apos envio do arquivo, fazer redirect
	//FIXME: Configurações de max upload file length, max execution time , memory limit
	//FIXME: Tratamento de erro no envio 
	
	$includeModels = array('BaseModel.class','Operacao.class');
	include('../../model/BaseModel.class.php');
	include('../../model/Operacao.class.php');
	
	$contratoid = NULL;
	$submitUrl = NULL;   
	$auth = array(
					array('action'=> 'Enviar', 'operacao'=>Operacao::CONTRATO_CADASTRAR_ARQUIVOS),						
					array('action'=> 'Excluir', 'operacao'=>Operacao::CONTRATO_CADASTRAR_ARQUIVOS)						
				 );
	require_once '../../controller/controller.inc.php';	
	
	try {    
	
		//Autorizacao
		$operacoes = array();
		$operacoes[0] = Operacao::CONTRATO_CADASTRAR_ARQUIVOS;
		$operacoes[1] = Operacao::CONTRATO_VISUALIZAR_ARQUIVOS;		
		$usuario->isAuthorizedViewOperacao( $operacoes );
	
		// Classes para indicar a aba ativa
		$classeContratos     = '';
		$classeVagas         = '';
		$classeLotacoes      = '';
		$classeSalarios      = '';
		$classeVagasLotacoes = '';
		$classeAditivos      = '';
		$classeArquivos      = 'class="ativa"';
				
		$contratoid = (isset($_GET['contratoid'])) ? $_GET['contratoid'] : NULL;
		$contrato = new Contrato( $contratoid );
	    $arquivos = array();    
	    
	     //Autorizacao
	//    if ( !$usuario->isContratoPermitido($contratoid)){
	//        $contratoid = NULL;	    	
	//    	throw new Exception('Voce não tem autorizacao para acessar esta pagina.');	    		
	//    }
	    
	    FluxoContrato::isVisible(array(Operacao::CONTRATO_VISUALIZAR_ARQUIVOS, Operacao::CONTRATO_CADASTRAR_ARQUIVOS));
	    
		if (FluxoContrato::isEditable('arquivoscontrato', $contrato)) {
	    	$readOnly = '';
	    }
	    else {
	    	$readOnly = TRUE;
	    }
	    
	    //URL corrente com o id do contrato
		$submitUrl = basename(__FILE__) . '?contratoid=' . $contratoid;	  
		        
		//Acoes referentes ao fluxo de cadastro e aprovacao do contrato
		require( '../../controller/contratos/helper_situacao.php' );
	    if(isset($message)){
	        //Redirect
	        header( 'Location: arquivoscontrato.php?contratoid=' . $contratoid . '&message='.$message);                            
	    }
	
	    //Diretorio onde são armazenados os arquivos de cada contrato
	    $diretorio = realpath('../../arquivos/contratos');
	    $path = $diretorio.'/'.$contratoid;   
		
	    //Cria a pasta de arquivos do contrato caso não exista        
	    if(!is_null($contratoid)){   
	        if (!is_dir($path)){
	            try{
	                mkdir($path);
	            }catch(Exception $e){
	                throw new Exception('Não foi possivel criar a pasta do contrato.');
	            }
	        }
	    }
	
	    //Listando os arquivos do contrato	    
	    if(!is_null($contratoid)){           
	        $ponteiro = opendir($path);
	         while ($nome_itens = readdir($ponteiro)) {
	             if ($nome_itens!="." && $nome_itens!=".."){
	                 $arquivos[] = $nome_itens;
	             }
	         }      
	    }   
	    
	    //INICIO ACOES ------------    
	    if ( isset ($_POST["btnAcao"]) ){	        
	        
	        switch($_POST["btnAcao"]){            
	                    
	            case 'Enviar':
	                                             
	                //Verifica se o arquivo foi enviado	
	                $arquivo = isset($_FILES["arquivoPdf"]) ? $_FILES["arquivoPdf"] : FALSE;                    
	                
	    			//Configurações de Tamanho e Tipo
	    			$config["tamanho"] = 20000000;                                         
	                $config["tipo"] = 'pdf';
	                
	                if($arquivo){
	                    $erro= FALSE; 
	
	                    // Verifica se o mime-type do arquivo é de pdf
	                    if( $arquivo["error"] == 1  ){
	                        $erro= TRUE;
	                        $message = 'erroEnvio';
	                    }  
	                    
	                    // Verifica se o mime-type do arquivo é de pdf
	                    if( (!$erro) and $arquivo["type"] != 'application/pdf'  ){
	                        $erro= TRUE;
	                        $message = 'tipoArquivo';
	                    }                        
	                    //Verifica tamanho do arquivo
	                    if( (!$erro) and $arquivo["size"] > $config["tamanho"]){
	                        $erro= TRUE;
	                        $message = 'tamArquivo';
	                    }                        
	                    //listando os arquivos do contrato	    
	                    if( (!$erro) and ($contratoid !== NULL) ){           
	                        $ponteiro = opendir($path);
	                         while ($nome_itens = readdir($ponteiro)) {
	                             if ($nome_itens == $arquivo['name']){
	                                 $erro= TRUE;
	                                 $message = 'existeArquivo';
	                             }
	                         }      
	                    }
	                    //Caso nao exista erro o arquivo sera enviado                        
	                    if(!$erro){
	                        move_uploaded_file($arquivo["tmp_name"], $path.'/'.$arquivo['name']);
	                        $message = 'envio';                                                 
	                    }                   
	                }
	                //Redirect
	                header( 'Location: arquivoscontrato.php?contratoid=' . $contratoid . '&message='.$message);                            
	    		break;
	    			
	    		case 'Excluir': 
	    		    	
	    		    $erro = FALSE;   		    
	    		    //Verificar se algum arquivo foi selecionado
	    		    if(!isset($_POST['chkRegistro'])){
	    		        throw new Exception('Escolha 1 ou mais arquivo para exclusão.');
	    		    }	
	    		    //Excluir no servidor arquivo selecionado 	    		
	    		    foreach($_POST['chkRegistro'] as $registro){
	    		        $filepath = $path.'/'.$registro;
	                    if (! unlink ($filepath)) {
	                        $message = 'erroExcluir';
	                        $erro=TRUE;                        
	                    }                        
	    		    }    		    
	    		    if(!$erro){
	    		        $message = 'excluir';    		        
	    		    }
	    		    //Redirect
	    		    header( 'Location: arquivoscontrato.php?contratoid=' . $contratoid . '&message='.$message);   	            		    
	    		break;
	    		
	    		case 'Download':
	    		    if(!isset($_POST['chkRegistro'])){
	    		        throw new Exception('Escolha um arquivo para download.');
	    		    }else{
	    		        $registro = $_POST['chkRegistro'];	    		    
	        		    if (count($registro) > 1){
	        		        throw new Exception('Por favor, escolha somente 1 Arquivo.');
	        		    }	    		        		    
	        		    $file = $path .'/'.$registro[0]; 
	    		    }   		      		    
	    		break;   		
	        }     
	    }
	    else{
	        if(isset($_GET['send'])){
		        //Redirect
		        $message = 'erroEnvio';
		        header( 'Location: arquivoscontrato.php?contratoid=' . $contratoid . '&message='.$message);
		    }
	    }      
	} catch(exception $e){    
	    $erro = $e->getMessage();	
	}
	//FIM ACOES ------------
		
		
	//Mensagens
	if ( isset ( $_GET['message'] ) ){
	    switch ( $_GET['message'] ){
	        case 'envio':
	            $sucesso = 'Arquivo enviado com sucesso.';
	            break;
	        case 'excluir':
	            $sucesso = 'Arquivo(s) removido(s) com sucesso.';
	            break;
	        case 'tipoArquivo':
	            $erro= "Arquivo em formato inválido! O arquivo deve ser pdf. 
	            		Envie outro arquivo";
	            break;
	        case 'tamArquivo':
	            $erro= "Arquivo em tamanho muito grande! 
	                	A imagem deve ser de no máximo " . $config["tamanho"] . " bytes. 
	                	Envie outro arquivo";
	            break;
	        case 'existeArquivo':
	            $erro = 'Arquivo já existe no servidor.';
	            break;
	        case 'erro':
	            $erro = 'Erro: Operação não foi realizada.';
	            break;
	        case 'erroExluir':
	            $erro = "1 ou mais arquivos não foram encontrados.";
	            break;
	        case 'erroEnvio':
	            $erro = "Problemas na comunicação, arquivo não pode ser enviado.";
	            break;
	    }
	}
   
?>
